/*
 * @Descripttion: 
 * @Author: ziwei
 * @Date: 2022-08-21 16:52:24
 * @LastEditors: ziwei
 * @LastEditTime: 2022-08-21 17:45:30
 */
// 第一版
// var curry = function (fn) {
//     var args = [].slice.call(arguments, 1);
//     console.log("++1",arguments)
//     return function() {
//         console.log("++2",arguments)
//         var newArgs = args.concat([].slice.call(arguments));
//         console.log("++3",this,newArgs)
//         return fn.apply(this, newArgs);
//     };
// };

// function add(a, b) {
//     return a + b;
// }

// // var addCurry = curry(add, 1, 2);
// // console.log(addCurry());// 3
// //或者
// var addCurry = curry(add, 1,2);
// console.log(addCurry(2))
// //或者
// var addCurry = curry(add);
// console.log(addCurry(1, 2))

// function sub_curry(fn){
//     return function(){
//         return fn()
//     }
// }

// function curry(fn, length){
//     length = length || 4;
//     console.log(fn)
//     return function(){
//         if (length > 1) {
//             return curry(sub_curry(fn), --length)
//         }
//         else {
//             return fn()
//         }
//     }
// }

// var fn0 = function(){
//     console.log(1)
// }
// var fn1 = curry(fn0)
// fn1()()()() // 1
function sub_curry(fn) {
    var args = [].slice.call(arguments, 1);
    return function() {
        return fn.apply(this, args.concat([].slice.call(arguments)));
    };
}
function curry(fn, length) {
    length = length || fn.length;

    var slice = Array.prototype.slice;

    return function() {
        if (arguments.length < length) {
            var combined = [fn].concat(slice.call(arguments));
            return curry(sub_curry.apply(this, combined), length - arguments.length);
        } else {
            return fn.apply(this, arguments);
        }
    };
}

var fn = curry(function(a, b, c) {
    return [a, b, c];
});

//fn("a", "b", "c") // ["a", "b", "c"]
console.log(fn("a")("b", "c"))